package org.ironbrain.client;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import javax.websocket.OnMessage;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.concurrent.CountDownLatch;
@ServerEndpoint("/ib")
public class IBServerEndpoint {
BufferedImage image;
@OnMessage
public void onMessage(String message, Session session) {
try {
OutputStream sendStream = session.getBasicRemote().getSendStream();
switch (message) {
case "screenshot":
CountDownLatch latch = new CountDownLatch(1);
ScreenCapture screenCapture = new ScreenCapture(img -> {
image = img;
latch.countDown();
});
screenCapture.setVisible(true);
latch.await();
ImageWriter writer = ImageIO.getImageWritersByFormatName(Main.SCREEN_SHOT_FILE_FORMAT).next();
ImageWriteParam imgParam = writer.getDefaultWriteParam();
imgParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
imgParam.setCompressionQuality(1.0F); //Highest quality
ImageOutputStream ios = ImageIO.createImageOutputStream(sendStream);
writer.setOutput(ios);
IIOImage iioImage = new IIOImage(image, null, null);
writer.write(null, iioImage, imgParam);
sendStream.close();
break;
}
} catch (IOException | InterruptedException e1) {
e1.printStackTrace();
}
}
}